package com.southminority.ethnic.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 文档类型枚举
 * 
 * @author SouthMinority
 */
@Getter
@AllArgsConstructor
public enum DocumentTypeEnum {

    /**
     * 研究报告
     */
    RESEARCH_REPORT(1, "研究报告", "research_report"),

    /**
     * 学术论文
     */
    ACADEMIC_PAPER(2, "学术论文", "academic_paper"),

    /**
     * 政策文件
     */
    POLICY_DOCUMENT(3, "政策文件", "policy_document"),

    /**
     * 法律法规
     */
    LEGAL_REGULATION(4, "法律法规", "legal_regulation"),

    /**
     * 历史文献
     */
    HISTORICAL_DOCUMENT(5, "历史文献", "historical_document"),

    /**
     * 文化资料
     */
    CULTURAL_MATERIAL(6, "文化资料", "cultural_material"),

    /**
     * 语言资料
     */
    LANGUAGE_MATERIAL(7, "语言资料", "language_material"),

    /**
     * 教育资料
     */
    EDUCATIONAL_MATERIAL(8, "教育资料", "educational_material"),

    /**
     * 统计数据
     */
    STATISTICAL_DATA(9, "统计数据", "statistical_data"),

    /**
     * 调研报告
     */
    SURVEY_REPORT(10, "调研报告", "survey_report"),

    /**
     * 会议纪要
     */
    MEETING_MINUTES(11, "会议纪要", "meeting_minutes"),

    /**
     * 项目文档
     */
    PROJECT_DOCUMENT(12, "项目文档", "project_document"),

    /**
     * 技术文档
     */
    TECHNICAL_DOCUMENT(13, "技术文档", "technical_document"),

    /**
     * 其他文档
     */
    OTHER(99, "其他文档", "other");

    /**
     * 类型码
     */
    private final Integer code;

    /**
     * 类型名称
     */
    private final String name;

    /**
     * 类型标识
     */
    private final String identifier;

    /**
     * 根据类型码获取枚举
     */
    public static DocumentTypeEnum getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (DocumentTypeEnum docType : values()) {
            if (docType.getCode().equals(code)) {
                return docType;
            }
        }
        return null;
    }

    /**
     * 根据标识获取枚举
     */
    public static DocumentTypeEnum getByIdentifier(String identifier) {
        if (identifier == null || identifier.trim().isEmpty()) {
            return null;
        }
        for (DocumentTypeEnum docType : values()) {
            if (docType.getIdentifier().equalsIgnoreCase(identifier.trim())) {
                return docType;
            }
        }
        return null;
    }

    /**
     * 判断是否为研究类文档
     */
    public static boolean isResearchDocument(Integer code) {
        return RESEARCH_REPORT.getCode().equals(code) || 
               ACADEMIC_PAPER.getCode().equals(code) || 
               SURVEY_REPORT.getCode().equals(code);
    }

    /**
     * 判断是否为政策法规类文档
     */
    public static boolean isPolicyDocument(Integer code) {
        return POLICY_DOCUMENT.getCode().equals(code) || 
               LEGAL_REGULATION.getCode().equals(code);
    }

    /**
     * 判断是否为文化类文档
     */
    public static boolean isCulturalDocument(Integer code) {
        return HISTORICAL_DOCUMENT.getCode().equals(code) || 
               CULTURAL_MATERIAL.getCode().equals(code) || 
               LANGUAGE_MATERIAL.getCode().equals(code);
    }
}
